package br.senac.arqpad.pizzaria.dao.factory;


public class CriadorFabricaConcreta {
	
	private static CriadorFabricaConcreta criadorFabricaConcreta;
	
	private CriadorFabricaConcreta() {};
	
	public static CriadorFabricaConcreta obterInstancia() {
		if (criadorFabricaConcreta == null) {
			criadorFabricaConcreta = new CriadorFabricaConcreta();
		}
		return criadorFabricaConcreta;
	}

	public RepositoryFactory obterFabricaConcreta() {
		//return new DAOHibernateFactory();
		return obterFabricaConcreta(TipoFabrica.JPA);
	}
	
	public RepositoryFactory obterFabricaConcreta(TipoFabrica tipoFabrica) {
		RepositoryFactory fabrica = null;
		switch (tipoFabrica) {
		case Hibernate:
			fabrica = new DAOHibernateFactory();
			break;
		case Memoria:
			fabrica = new DAOMemoriaFactory(); 
			break;						
		case JDBC:
			fabrica = new DAOJDBCFactory();
			break;
		case JPA:
			fabrica = new DAOJPAFactory();
			break;			
		}
		return fabrica;
	}
		
	public enum TipoFabrica {
		Hibernate,
		JDBC,
		Memoria,
		JPA
	}
}
